Chatbotでロググループを100個以上表示できずにハマったので調査してみた

Chatbotでロググループを100個以上表示できずにハマったので調査してみた

Chatbotでロググループ一覧を100個以上表示できずにハマったので調査しました。 Chatbotのアクションをカスタマイズすることは難しいので、回避策としてはAWS CLIを実行することに落ち着きました。
Clock Icon2024.07.17

結論

100個以上表示できません

はじめに

ChatbotでSlack通知の際に表示される以下のようなアクションについての記事です。

chatbot-action-limit-image1

chatbot-action-limit-image2

QueryLogs アクションでCloudWatch Logsの一覧が100件までしか取得できず、回避策がないか調査しました。
Chatbotの導入はAWSを利用しているプロジェクトであれば行うことが機会が多いです。毎回細かい設定など忘れがちなので今回の調査も備忘のために残しておきます。

なお、本記事はかなり細かい挙動について書いているので、執筆現在(2024/07/17)から挙動が修正される可能性があります。最新情報は自身の環境でご確認ください。

問題となった挙動を再現

問題となった挙動を再現します。
取得できるCloudWatch Logsが100件であることを確認するため、100個以上のロググループを作成します。

#!/bin/bash

# リージョンとプロファイルの設定
REGION="ap-northeast-1"
PROFILE="<プロファイル名を設定する>"

# 101個のLogグループを作成
for i in $(seq 1 101)
do
  LOG_GROUP_NAME="log-group-$i"
  aws logs create-log-group --log-group-name $LOG_GROUP_NAME --region $REGION --profile $PROFILE
  if [ $? -eq 0 ]; then
    echo "Created log group: $LOG_GROUP_NAME"
  else
    echo "Failed to create log group: $LOG_GROUP_NAME"
  fi
done

元々あったロググループも含め、合計で147個のロググループが存在する環境を用意できました。

chatbot-action-limit-image3

CloudWatch Metrics, CloudWatch Alarm, SNS, ChatBotを作成します。(作成の様子は割愛)

Slackへ通知を送り、ログ一覧を確認してみます。

chatbot-action-limit-image5

今回作成したロググループが一部取得出来ていません。

また、ロググループ名を入力しても表示できません。

chatbot-action-limit-image6

調査

結論: 100件以上表示することは出来ず、取得するロググループ一覧を絞ることもできない。

IAMポリシーを制限することで必要なロググループのみ表示できるか確認

100件の中に本当に必要なログがあれば良いので、取得するロググループを絞れないか検討しました。

前提として、Chatbotでログ一覧を取得するには、Chatbotのロールに権限を付与する必要があります。

logs:DescribeLogGroupsというアクションを許可することで、ロググループの一覧を取得できます。

Chatbotをマネジメントコンソールから作成すると以下のようなIAMポリシーが紐づいています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

こちらのポリシーの "Resource": "*" の箇所で "Resource": "<クエリしたいロググループ一覧>" と絞ることにより、本当に必要なロググループを表示できないか検討しました。

結果、こちらは不可能でした。
理由としては、 logs:DescribeLogGroups のアクションは"Resource": "*"を必ず指定しなければいけないためです。
IAMポリシーのビジュアルエディタでも以下のように確認できます。

chatbot-action-limit-image4

感想

Chatbotのアクションについては挙動が不明な点が多いので、調査も少し苦労しました。
AWS CLI で aws logs describe-log-groups のようにログ名を取得しても100件以上取得できるので、100という制限はChatbotの内部実装に起因するものだと推測できます。

Chatbotのアクションを完全に用途に合わせてカスタマイズするのは少し難しいので、障害調査の中では一次調査のために軽く動作させるもの、と考えた方がよさそうです。

どうしてもSlack上で複雑な調査を行いたい場合、アクションを色々頑張って弄るよりも、素直にChatbotにAWS CLIを実行してもらうのが良さそうです。

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.